home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Disc to the Future 2
/
Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin
/
MAC
/
THINKC
/
4_0
/
AI88PATT
/
PATTERN.C
< prev
Wrap
C/C++ Source or Header
|
1990-01-08
|
7KB
|
247 lines
/* program to generate Adobe Illustrator Patterns from
hexadecimally encoded MacDraw/MacPaint Type
Patterns. Written by Jeff Meredith 12/89. Internet Address meredith@erl.mit.edu
Strategy
Use Illustrator commands to stroke lines one point in width across a row. If black bits are contiguous then test and draw line contiguously.
Instructions. Double click on Application or run from within
the Think C 4.0 environment. Input name for file at standard file
dialog box, then answer questions by typing, if the default (in brackets[]) is ok then
just hit return. Transparent patterns will have their whited areas be transparent.
Input the two digit hexadecimal encoding for each row individually
A header for a typical pattern follows and will be output by the program:
%%BeginPattern: (Acid_Igneous) a sample pattern
(Acid_Igneous) 150.5 198.5 162.5 206.5 [
(0 O 0 R 1 g 1 G) @
_ &
(0 O 0 R 0 g 0 G) @
(
0 i 0 J 0 j 0.25 w 4 M []0 d
%%Note:
150.5 203.5 m
152.5 203.5 l*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<console.h>
#define HEX "FF" /* default text value */
#define PATTERN "Test Pattern"
#define QUIT "y"
#define TRANSPARENT "n"
#define column1 150
#define column2 151
#define column3 152
#define column4 153
#define column5 154
#define column6 155
#define column7 156
#define column8 157
#define column9 158
FILE *fopen(),*PPtr;
main()
{
char putfile1[255];
char hexvalue[2],pattern_name[40],buffer[128],answer[2],transparent[2];
int row[8];
void getstrng(),header(),trailer();
printf("Program to take encoded MacDraw Patterns and convert them into Illustrator Patterns\n");
/* use StdPutFile Dialog Box to specify filename */
if(putfile(putfile1,"Name of output pattern file:","Illus.Patterns") != 0);
PPtr=fopen(putfile1,"w");
header();
strcpy(answer,"n");
while(strcmp(answer,"y")){
getstrng("Name of Pattern",PATTERN,pattern_name,buffer);
fprintf(PPtr,"%%%%BeginPattern: (%s)\n",pattern_name);
fprintf(PPtr,"(%s) 150 206.5 158 198.5 [\n",pattern_name);
getstrng("transparent",TRANSPARENT,transparent,buffer);
if(!strcmp(transparent,"y"))
fprintf(PPtr,"%%%%Tile\n");
else
{ fprintf(PPtr,"(0 O 0 R 1 g 1 G)@\n");
fprintf(PPtr,"_ &\n");
}
fprintf(PPtr,"(0 O 0 R 0 g 0 G)@\n");
fprintf(PPtr,"(\n");
fprintf(PPtr,"0 i 0 J 0 j 1 w 4 M []0 d\n");
fprintf(PPtr,"%%%%Note:\n");
getstrng("hexvalue",HEX,hexvalue,buffer);
row[0]=206;
decompose(row[0],hexvalue);
getstrng("hexvalue",HEX,hexvalue,buffer);
row[1]=205;
decompose(row[1],hexvalue);
getstrng("hexvalue",HEX,hexvalue,buffer);
row[2]=204;
decompose(row[2],hexvalue);
getstrng("hexvalue",HEX,hexvalue,buffer);
row[3]=203;
decompose(row[3],hexvalue);
getstrng("hexvalue",HEX,hexvalue,buffer);
row[4]=202;
decompose(row[4],hexvalue);
getstrng("hexvalue",HEX,hexvalue,buffer);
row[5]=201;
decompose(row[5],hexvalue);
getstrng("hexvalue",HEX,hexvalue,buffer);
row[6]=200;
decompose(row[6],hexvalue);
getstrng("hexvalue",HEX,hexvalue,buffer);
row[7]=199;
decompose(row[7],hexvalue);
fprintf(PPtr,") &\n] E\n%%%%EndPattern\n");
getstrng("Quit,y/n",QUIT,answer,buffer);
if(!strcmp(answer,"y")){
trailer();
ExitToShell();
}
}
}
decompose(rownumber,hexvalue)
int rownumber;
char hexvalue[];
{
int value1=0,value2=0;
int moveflag,lineflag;
if(!strncmp(&hexvalue[0],"F",1))value1=15;
if(!strncmp(&hexvalue[0],"E",1))value1=14;
if(!strncmp(&hexvalue[0],"D",1))value1=13;
if(!strncmp(&hexvalue[0],"C",1))value1=12;
if(!strncmp(&hexvalue[0],"B",1))value1=11;
if(!strncmp(&hexvalue[0],"A",1))value1=10;
if(!strncmp(&hexvalue[0],"9",1))value1=9;
if(!strncmp(&hexvalue[0],"8",1))value1=8;
if(!strncmp(&hexvalue[0],"7",1))value1=7;
if(!strncmp(&hexvalue[0],"6",1))value1=6;
if(!strncmp(&hexvalue[0],"5",1))value1=5;
if(!strncmp(&hexvalue[0],"4",1))value1=4;
if(!strncmp(&hexvalue[0],"3",1))value1=3;
if(!strncmp(&hexvalue[0],"2",1))value1=2;
if(!strncmp(&hexvalue[0],"1",1))value1=1;
if(!strncmp(&hexvalue[0],"0",1))value1=0;
if(!strcmp(&hexvalue[1],"F"))value2=15;
if(!strcmp(&hexvalue[1],"E"))value2=14;
if(!strcmp(&hexvalue[1],"D"))value2=13;
if(!strcmp(&hexvalue[1],"C"))value2=12;
if(!strcmp(&hexvalue[1],"B"))value2=11;
if(!strcmp(&hexvalue[1],"A"))value2=10;
if(!strcmp(&hexvalue[1],"9"))value2=9;
if(!strcmp(&hexvalue[1],"8"))value2=8;
if(!strcmp(&hexvalue[1],"7"))value2=7;
if(!strcmp(&hexvalue[1],"6"))value2=6;
if(!strcmp(&hexvalue[1],"5"))value2=5;
if(!strcmp(&hexvalue[1],"4"))value2=4;
if(!strcmp(&hexvalue[1],"3"))value2=3;
if(!strcmp(&hexvalue[1],"2"))value2=2;
if(!strcmp(&hexvalue[1],"1"))value2=1;
if(!strcmp(&hexvalue[1],"0"))value2=0;
moveflag=0; /* draw points with continuous lines if possible */
if(value1>=8){
fprintf(PPtr,"%d %d m\n",column1,rownumber);
moveflag=1;
value1-=8;
}
if(value1<4&&moveflag==1){
fprintf(PPtr,"%d %d l\nS\n",column2,rownumber);
moveflag=0;
} /* if value 1<4 draw point if needed fall through */
if(value1>=4){
if(moveflag==0){
fprintf(PPtr,"%d %d m\n",column2,rownumber);
moveflag=1;
}
value1-=4; /* continue drawing line */
} /* value1<4 and move flag set type fprintf(%d %d l)*/
if(value1<2&&moveflag==1){
fprintf(PPtr,"%d %d l\nS\n",column3,rownumber);
moveflag=0;
}
if(value1>=2){
if(moveflag==0){
fprintf(PPtr,"%d %d m\n",column3,rownumber);
moveflag=1;
}
value1-=2;
}
if(value1<1&&moveflag==1){
fprintf(PPtr,"%d %d l\nS\n",column4,rownumber);
moveflag=0;
}
if(value1==1){
if(moveflag==0){
fprintf(PPtr,"%d %d m\n",column4,rownumber);
moveflag=1;
if(value2<8){
fprintf(PPtr,"%d %d l\nS\n",column5,rownumber);
moveflag=0;
}
}
else{ /* move flag =1 */
if(value2<8){
fprintf(PPtr,"%d %d l\nS\n",column5,rownumber);
moveflag=0;
}
}
}
if(value2>=8){
if(moveflag==0){
fprintf(PPtr,"%d %d m\n",column5,rownumber);
moveflag=1;
}
value2-=8;
}
if(value2<4&&moveflag==1){
fprintf(PPtr,"%d %d l\nS\n",column6,rownumber);
moveflag=0;
} /* if value 1<4 draw point if needed fall through */
if(value2>=4){
if(moveflag==0){
fprintf(PPtr,"%d %d m\n",column6,rownumber);
moveflag=1;
}
value2-=4; /* continue drawing line */
} /* value2<4 and move flag set type fprintf(%d %d l)*/
if(value2<2&&moveflag==1){
fprintf(PPtr,"%d %d l\nS\n",column7,rownumber);
moveflag=0;
}
if(value2>=2){
if(moveflag==0){
fprintf(PPtr,"%d %d m\n",column7,rownumber);
moveflag=1;
}
value2-=2;
}
if(value2<1&&moveflag==1){
fprintf(PPtr,"%d %d l\nS\n",column8,rownumber);
moveflag=0;
}
if(value2==1){
if(moveflag==0){
fprintf(PPtr,"%d %d m\n",column8,rownumber);
fprintf(PPtr,"%d %d l\nS\n",column9,rownumber);
}else{
fprintf(PPtr,"%d %d l\nS\n",column9,rownumber);
}
}
}